package com.ld.service.impl;

import com.ld.doamin.Employee;
import com.ld.dto.LoginDTO;
import com.ld.mapper.LoginMapper;
import com.ld.service.ILoginService;
import com.ld.basic.utils.AjaxResult;
import com.ld.basic.utils.LoginMap;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

import java.util.*;

@Service
public class LoginServiceImpl implements ILoginService {

    @Autowired
    private LoginMapper mapper;

    @Override
    public AjaxResult login(LoginDTO loginDTO) {
        String username = loginDTO.getUsername();
        String password = loginDTO.getPassword();

        //判断账号或者密码是否有一个为空，有一个为空就登录失败
        if (StringUtils.isEmpty(username) || StringUtils.isEmpty(password)) {
            return AjaxResult.me().setSuccess(false).setMsg("账号或者密码有一个为空，请重新输入");
        }

        //调用数据库  根据username去查询到employee对象
        Employee employee = mapper.selectByusername(loginDTO);

        //拿到这个对象去进行判断  为空说明账号错了
        if (Objects.isNull(employee)) {
            return AjaxResult.me().setSuccess(false).setMsg("账号或者密码错误，请重新输入");
        }

        //拿到密码与dto中的密码比对看密码是否对应的上
        if (!password.equals(employee.getPassword())) {
            //密码对应不上的话，也是登录失败
            return AjaxResult.me().setSuccess(false).setMsg("账号或者密码错误，请重新输入");
        }

        //登录成功后，生成一个随机数作为token给前端
        String token = UUID.randomUUID().toString();
        //将这个token做为key，当前登录的用户作为value传到map中保存
        LoginMap.map.put(token, employee);
        /**
         * 为了之后做权限验证能够拿到当前登录的用户id，所以这里要将该员工的对象传给前端，以便保存到localstorage中
         * token也是需要的，所以将token和当前用户对象一起保存到一个map集合中，放到AjaxResult中去
         * 注意：需要将当前登录用户转成json
         */
        Map<String, Object> hashmap = new HashMap<>();
        hashmap.put("token",token);
       employee.setPassword("");

        hashmap.put("loginUser",employee);

        //返回一个token给前端保存就行了，让它保存到localSession中
        return AjaxResult.me().setData(hashmap);

    }

    @Override
    public List<String> getPermissionSns(Employee employee) {
        return mapper.selectPermissionSns(employee);
    }
}
